import httpx
from typing import Any, Dict, Optional

class FeishuClient:
    """
    飞书客户端：支持异步 GET 请求，允许自定义参数和请求头。
    """

    def __init__(self, base_url: Optional[str] = None, default_headers: Optional[Dict[str, str]] = None) -> None:
        # 1. 初始化基础 URL 和默认请求头
        self.base_url = base_url or ""
        self.default_headers = default_headers or {}

    async def async_get(
        self,
        url: Optional[str] = None,
        params: Optional[Dict[str, Any]] = None,
        headers: Optional[Dict[str, str]] = None,
        timeout: float = 10.0,
    ) -> httpx.Response:
        """
        异步 GET 请求方法

        :param url: 可选，完整 URL 或相对路径；缺省则使用 base_url
        :param params: 查询参数字典
        :param headers: 请求头字典
        :param timeout: 超时时间（秒）
        :return: httpx.Response 对象
        """
        # 1. 合并 headers（默认 + 传入）
        merged_headers = self.default_headers.copy()
        if headers:
            merged_headers.update(headers)

        # 2. 处理 URL（支持相对路径与缺省 base_url）
        request_url = (url or "").strip()
        if not request_url:
            request_url = self.base_url
        elif self.base_url and not request_url.startswith("http"):
            request_url = self.base_url.rstrip("/") + "/" + request_url.lstrip("/")

        # 3. 发起异步 GET 请求
        async with httpx.AsyncClient(timeout=timeout) as client:
            response = await client.get(
                request_url,
                params=params,
                headers=merged_headers,
            )
        # 4. 返回响应对象
        return response
